import { readB, writeB } from './http';

/**
 * 生成溯源码QR码的接口
 * @param productId 产品ID
 * @param quantity 需要生成的数量
 * @returns Promise 返回生成的QR码数据
 */
export const generateQRCodes = async (productId: string | number, quantity: number) => {
    try {
        const response = await writeB.post('/TraceabilityMenganment/GenerateQRCode', {
            productId,
            quantity
        });

        return response.data;
    } catch (error) {
        console.error('生成QR码失败:', error);
        throw error;
    }
};

/**
 * 导出QR码图片
 * @param productId 产品ID
 * @param quantity 需要导出的数量
 * @returns Promise 返回导出结果
 */
export const exportQRCodes = async (productId: string | number, quantity: number) => {
    try {
        // 使用 Blob 下载方式，适用于较大文件
        const response = await writeB.post('/TraceabilityMenganment/ExportQRCode',
            {
                productId,
                quantity
            },
            {
                responseType: 'blob' // 指定响应类型为blob
            }
        );

        // 创建Blob对象
        const blob = new Blob([response.data], { type: 'application/zip' });

        // 创建下载链接
        const url = window.URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.href = url;

        // 获取产品信息以用于文件命名
        const productInfo = await getProductInfo(productId);
        const fileName = `${productInfo.goodsName || '溯源码'}_${quantity}个.zip`;

        link.setAttribute('download', fileName);
        document.body.appendChild(link);
        link.click();

        // 清理
        window.URL.revokeObjectURL(url);
        document.body.removeChild(link);

        return {
            success: true,
            message: '导出成功'
        };
    } catch (error) {
        console.error('导出QR码失败:', error);
        throw error;
    }
};

/**
 * 获取产品信息
 * @param productId 产品ID
 * @returns Promise 返回产品信息
 */
export const getProductInfo = async (productId: string | number) => {
    try {
        const response = await readB.get(`/TraceabilityMenganment/GetProductById`, {
            params: { id: productId }
        });

        if (response.data.code === 200) {
            return response.data.data;
        } else {
            throw new Error(response.data.message || '获取产品信息失败');
        }
    } catch (error) {
        console.error('获取产品信息失败:', error);
        throw error;
    }
};

/**
 * 获取溯源详情页面URL
 * @param qrCodeId QR码唯一标识
 * @returns 溯源详情页面URL
 */
export const getTraceabilityDetailUrl = (qrCodeId: string) => {
    // 获取当前域名作为基础URL
    const baseUrl = window.location.origin;

    // 构建溯源详情页面URL
    return `${baseUrl}/traceability-detail?id=${qrCodeId}`;
}; 